When using single-tasking operating systems, computer processors typically execute computer programs or program subroutines serially, i.e. no computer program or program subroutine can begin to execute until the previous one terminates. Inefficiencies inherent in such single-tasking operating system led to the development of multitasking or multithreaded operating systems. In these latter operating systems, each computer program is divided into one or more processes (sometimes referred to as program threads or streams of execution), each performing a specific task. Because a single processor can execute only one such process at a time, execution of a process is advantageously suspended awaiting some event, or because of such an event.
However, multitasking operating systems, unlike single-tasking operating systems, can cause a processor to execute another process of the suspended (or a different) computer program. Multitasking operating systems have been used in multiprocessor environments to permit processes of the same or different programs to execute on different processors. Particular application programs may require special treatment in respect of user control or real or perceived priority of execution.
In order to support multiple real-time applications on a single platform, operating systems advantageously provides Quality of Service (QoS) assurances based on the provisioning of system resources among applications to achieve desired levels of predictable performance. Traditional QoS parameters include fairness, delay, and throughput. Such QoS assurances often take the form of reservations of system resources, such as percentages or fixed quantities of central processing unit (CPU) cycles or time slices, or of allocations of disk memory accesses. Other QoS assurances are commonly provided in the separate field of data communications. These include specified packet delay or desired bandwidth.
Providing QoS assurances in real-time multiprogramming operating system environments have, however, continues to prove difficult, in part because performance of a single application typically is affected by the total load on the system. Some real-time operating systems are capable of delivering performance guarantees such as delay bounds, but in doing so require that applications be modified to take advantage of the real-time features. These and other QoS efforts have focused on one or more operating system parameters or QoS criteria, but not on an overall QoS approach that insures adequate performance in the most demanding real-time environments, e.g, allocation of resources in a high-capacity, high-efficiency video server.
Similarly, QoS guarantees offered in data communication systems, e.g., in allocating the bandwidth or time intervals on a high-speed data link to a number of competing input data streams tend to emphasize one or more of packet delay, delay jitter, throughput and fairness. Typically, a QoS requirement for such link scheduling contexts is specified by a single dimensionless weight or rate.